|
PHP5의 추가된 사항을 올리는 곳입니다. |
[1] |
|
등록일:2007-10-10 23:11:03 (0%) 작성자: 제목:[함수] RSS 리더기 php5 용 입니다. |
|
엊그제 올렸다가 몇가지 수정하고 추가해서 다시 올립니다. ㅜㅡ;;
파일은 reader 클래스를 포함한 파일(소스1)과 출력(소스2) 파일입니다.
xml 이 지원되도록 컴파일 되어져야 합니다.
이넘이 작동하는 모습은
http://hk.dotnet.cc/rss.php
에서 확인하실 수 있습니다. 제가 자주가는 http://www.dpreview.com 에서 제공하는 rss feed 입니다.
-------------------------------------------------
소스1 (rss.reader.class.php)
<?
/**
* http://web.resource.org/rss/1.0/spec
* http://blogs.law.harvard.edu
*/
class rss
{
private $parser = null;
private $current_tag = null;
private $current_attribute = null;
private $rdf_code = null;
private $item_count = 0;
public $channel = array();
public function __construct()
{
$this->parser = xml_parser_create();
}
public function parse($rss_file)
{
xml_set_object($this->parser, &$this);
xml_set_element_handler($this->parser, "_startElement", "_endElement");
xml_set_character_data_handler($this->parser, "_characterData");
$fp = @fopen($rss_file, "r");
if(!$fp)
{
throw new Exception("Error reading RSS file : " . $rss_file);
}
else
{
while($rssData = fread($fp, 4096))
{
if(xml_parse($this->parser, $rssData, feof($fp)) == false)
{
throw new Exception(xml_error_string(xml_get_error_code($this->parser)) . " Line : " . xml_get_current_line_number($this->parser));
}
}
fclose($fp);
xml_parser_free($this->parser);
}
}
private function _startElement($parser, $name, $attribute = null)
{
$this->current_tag = $name;
$this->current_attribute = $attribute;
switch($this->current_tag)
{
case "CHANNEL" :
$this->rdf_code = "channel";
break;
case "IMAGE" :
$this->rdf_code = "image";
break;
case "ITEM" :
$this->rdf_code = "item";
break;
case "CLOUD" :
$this->rdf_code = "cloud";
break;
case "TTL" :
$this->rdf_code = "ttl";
break;
case "TEXTINPUT" :
$this->rdf_code = "textinput";
break;
}
}
private function _endElement($parser, $name, $attribute = null)
{
if($name == "ITEM")
{
$this->item_count += 1;
}
$this->current_tag = null;
$this->current_attribute = null;
}
private function _characterData($parser, $cdata)
{
$cdata = iconv(xml_parser_get_option($parser, XML_OPTION_TARGET_ENCODING), "EUC-KR", $cdata);
if($this->rdf_code == "channel")
{
switch($this->current_tag)
{
case "TITLE" :
$this->channel['channel']['title'] .= $cdata;
break;
case "LINK" :
$this->channel['channel']['link'] .= $cdata;
break;
case "DESCRIPTION" :
$this->channel['channel']['description'] .= $cdata;
break;
case "LANGUAGE" :
$this->channel['channel']['language'] .= $cdata;
break;
case "COPYRIGHT" :
$this->channel['channel']['copyright'] .= $cdata;
break;
case "MANAGINGEDITOR" :
$this->channel['channel']['managingeditor'] .= $cdata;
break;
case "WEBMASTER" :
$this->channel['channel']['webmaster'] .= $cdata;
break;
case "PUBDATE" :
$this->channel['channel']['pubdate'] .= $cdata;
break;
case "LASTBUILDDATE" :
$this->channel['channel']['lastbuilddate'] .= $cdata;
break;
case "DOCS" :
$this->channel['channel']['docs'] .= $cdata;
break;
}
}
else if($this->rdf_code == "image")
{
switch($this->current_tag)
{
case "URL" :
$this->channel['channel']['image_url'] .= $cdata;
break;
case "WIDTH" :
$this->channel['channel']['image_width'] .= $cdata;
break;
case "HEIGHT" :
$this->channel['channel']['image_height'] .= $cdata;
break;
case "TITLE" :
$this->channel['channel']['image_title'] .= $cdata;
break;
case "LINK" :
$this->channel['channel']['image_link'] .= $cdata;
break;
}
}
else if($this->rdf_code == "item")
{
switch($this->current_tag)
{
case "LINK" :
$this->channel['item'][$this->item_count]['link'] .= $cdata;
break;
case "TITLE" :
$this->channel['item'][$this->item_count]['title'] .= $cdata;
break;
case "DESCRIPTION" :
$this->channel['item'][$this->item_count]['description'] .= $cdata;
break;
case "PUBDATE" :
$this->channel['item'][$this->item_count]['pubdate'] .= $cdata;
break;
}
}
}
public function __destruct()
{
}
};
?>
-------------------------------------------------
소스2 (rss.html)
<?
include_once("rss.reader.class.php");
using("xml");
$rss = new rss();
try
{
// rss 주소
$rss->parse("http://slashdot.org/rss/index.rss");
}
catch(Exception $e)
{
die($e->getMessage());
}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE> New Document </TITLE>
<style type="text/css">
<!--
TABLE, TR, TD, TEXTAREA, INPUT, SELECT, OPTION
{
font-family:Tahoma;
font-size:9pt;
}
-->
</style>
<META NAME="Generator" CONTENT="EditPlus">
<META NAME="Author" CONTENT="">
<META NAME="Keywords" CONTENT="">
<META NAME="Description" CONTENT="">
</HEAD>
<BODY>
<table border="0" align="center" width="100%" cellpadding="0" cellspacing="0">
<tr>
<td>
<? if(isset($rss->channel['channel'])) { ?>
<table border="0" align="left" width="0%" cellpadding="3" cellspacing="0"><tr>
<td>
<? if($rss->channel['channel']['image_url'] != null) { ?>
<a href="<?= $rss->channel['channel']['image_link'] ?>"><img src="<?= $rss->channel['channel']['image_url'] ?>" title="<?= $rss->channel['channel']['image_title'] ?>" border="0" target="_blank">
<? } ?>
</td>
<td>
<?= $rss->channel['channel']['title'] ?><br>
<?= $rss->channel['channel']['description'] ?>
</td>
</tr></table>
<? } ?>
</td>
</tr>
<tr>
<td><hr></td>
</tr>
<tr>
<td>
<table border="0" align="left" width="100%" cellpadding="5" cellspacing="0">
<?
if(isset($rss->channel['item']))
{
for($i = 0; $i < sizeof($rss->channel['item']); $i++)
{
?>
<tr>
<td><a href="<?= $rss->channel['item'][$i]['link'] ?> " target="_blank"><?= $rss->channel['item'][$i]['title'] ?></a></td>
</tr>
<tr>
<td><?= nl2br(html_entity_decode($rss->channel['item'][$i]['description'])) ?></td>
<?
}
}
?>
</tr></table>
</td>
</tr>
</table>
건강이 05-06-17 19:59
점점 PHP 5.0 사용하시는분이 느나 보네요..준비를 해나가야 겠습니다.
점점 PHP 5.0 사용하시는분이 느나 보네요..준비를 해나가야 겠습니다.
x딜마 05-06-17 21:30
using(\"xml\"); <--- 이함수 뭔가요 에러가 나네요??
using(\"xml\"); <--- 이함수 뭔가요 에러가 나네요??
거니 05-06-18 13:18
x딜마 /
핫.. 구문 삭제 부탁드립니다. 제가 사용하는 함수인데 빼먹고 안지웠네엽~ 죄송..ㅜ.ㅡ
x딜마 /
핫.. 구문 삭제 부탁드립니다. 제가 사용하는 함수인데 빼먹고 안지웠네엽~ 죄송..ㅜ.ㅡ
우워오 05-09-16 00:08
PHP5 버전이 아니면 한글이 깨져버리는 문제가 있죠..-_-;
출처 : http://www.phpschool.com/gnuboard4/bbs/board.php?bo_table=tipntech&wr_id=40519&sca=&sfl=wr_subject%7C%7Cwr_content&stx=php5&sop=and&page=5 |
[본문링크] [함수] RSS 리더기 php5 용 입니다.
|
[1]
|
|
|
|
|
코멘트(이글의 트랙백 주소:/cafe/tb_receive.php?no=1087 |
|
|
|
|
|
|
|
|
|
Copyright byCopyright ⓒ2005, SSISO Community All Rights Reserved.
|
|
|